package JavaSE.Class11.InnerClasses;

interface IA{
    void test();
}

class OutClass4{
    public void test(){
        System.out.println("匿名内部类");
    }
}

class OutClass3 {
    public void testMethod(){
        //局部内部类（只能定义在方法里面）

        class InnerClass3{
            public void fun(){
                System.out.println("fun()...局部内部类");
            }
        }
        InnerClass3 innerClass3=new InnerClass3();
        innerClass3.fun();
    }
}

public class Test {
    public static void main(String[] args) {
        //局部内部类
        OutClass3 outClass3=new OutClass3();
        outClass3.testMethod();

        //匿名内部类
        OutClass4 outClass4=new OutClass4();
        outClass4.test();
        new OutClass4(){}.test();
        IA a=new IA() {
            @Override
            public void test() {
                System.out.println("test");
            }
        };
        a.test();
    }

    public static void main2() {
        //实例内部类的实例化
        //实例的成员都是需要通过外部类引用来带调用的
        OutClass2 outClass2 = new OutClass2();
        OutClass2.InnerClass2  innerClass2 = outClass2.new InnerClass2();

        innerClass2.test2();
    }

    public static void main1() {
        //静态内部类的实例化
        OutClass.InnerClass1 innerClass1 = new OutClass.InnerClass1();

        innerClass1.display();
    }
}
